package ind.nuts.lang.utils;

import cn.hutool.core.bean.BeanUtil;
import ind.nuts.lang.enums.EnumItem;
import ind.nuts.lang.enums.IEnum;
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * @author haoyun.zheng
 */
@Slf4j
public class EnumUtils {

    public static <T extends IEnum> String display(Class<T> clazz, Integer value) {
        if (null != clazz && value != null) {
            IEnum[] enums = clazz.getEnumConstants();
            for (IEnum iEnum : enums) {
                if (value.equals(iEnum.getValue())) {
                    return iEnum.getDesc();
                }
            }
        }

        return null;
    }

    public static <T extends IEnum> List<EnumItem> toList(Class<T> clazz) {
        if (null != clazz) {
            IEnum[] enums = clazz.getEnumConstants();
            List<EnumItem> items = new ArrayList<>(enums.length);

            for (IEnum iEnum : enums) {
                items.add(BeanUtil.toBean(iEnum, EnumItem.class));
            }

            return items;
        }

        return Collections.emptyList();
    }

    public static <T extends IEnum> boolean contains(Class<T> clazz, Integer value) {
        if (clazz != null && value != null) {
            IEnum[] enums = clazz.getEnumConstants();
            for (IEnum iEnum : enums) {
                if (value.equals(iEnum.getValue())) {
                    return true;
                }
            }
        }

        return false;
    }

}
